package com.lzhsite.technology.designPattern.visitor.StaffDemo;
/**
 * 访问者模式介绍
 * 最复杂的设计模式，并且使用频率不高，《设计模式》的作者评价为：大多情况下，你不需要使用访问者模式，
 * 但是一旦需要使用它时，那就真的需要使用了。 访问者模式是一种将数据操作和数据结构分离的设计模式。
 * （觉得太抽象，可以看下面的例子）。
 *
 * 访问者模式的使用场景
 * 对象结构比较稳定，但经常需要在此对象结构上定义新的操作。
 * 需要对一个对象结构中的对象进行很多不同的并且不相关的操作，而需要避免这些操作“污染”这些对象的类，
 * 也不希望在增加新操作时修改这些类。
 * 
 * 
 * 年底，CEO和CTO开始评定员工一年的工作绩效，员工分为工程师和经理，
 * CTO关注工程师的代码量、经理的新产品数量；CEO关注的是工程师的KPI和经理的KPI以及新产品数量。
 * 由于CEO和CTO对于不同员工的关注点是不一样的，这就需要对不同员工类型进行不同的处理。
 * 访问者模式此时可以派上用场了。
 * @author lzhcode
 *
 */
public class Client {

    public static void main(String[] args) {
        // 构建报表
        BusinessReport report = new BusinessReport();
        System.out.println("=========== CEO看报表 ===========");
        report.showReport(new CEOVisitor());
        System.out.println("=========== CTO看报表 ===========");
        report.showReport(new CTOVisitor());
    }
}